<?php

// 门面模式
// 定义：门面模式（也称外观模式）是指提供一个统一的接口去访问多个子系统的多个不同的接口，它
// 为子系统中的一组接口提供一个统一的高层接口
// 优点：
// 1、它对客户屏蔽了子系统组件，因而减少了客户处理的对象的数目并使得子系统使用起来更加方便
// 2、实现了子系统与客户之间的松耦合关系
// 3、如果应用需要，它并不限制它们使用子系统类。因此可以在系统易用性与能用性之间加以选择
// 适用场景：
// 1、为一些复杂的子系统提供一组接口
// 2、提高子系统的独立性
// 3、在层次化结构中，可以使用门面模式定义系统的每一层的接口

class Light
{
    function turnOn()
    {
        echo '打开闪光灯<br/>';
    }

    function turnOff()
    {
        echo '关闭闪光灯<br/>';
    }
}

class Camera
{
    function active()
    {
        echo '打开照相机<br/>';
    }

    function deactive()
    {
        echo '关闭照相机<br/>';
    }
}

class Facade
{
    protected $light;
    protected $camera;

    function __construct()
    {
        $this->light = new Light();
        $this->camera = new Camera();
    }

    function start()
    {
        $this->light->turnOn();
        $this->camera->active();
    }    

    function stop()
    {
        $this->light->turnOff();
        $this->camera->deactive();
    }
}

// 测试
$facede = new Facade();
$facede->start();
$facede->stop();